Operating systems typically schedule Input/Output (I/O) requests based on scheduling algorithms, which are carried out by I/O schedulers. According to one prior-art I/O scheduling technique, a single I/O scheduler schedules all I/O requests occurring within an operating system environment. For example, a single I/O scheduler schedules disk requests, printer requests, etc. One disadvantage of such an I/O scheduling technique is that a single scheduler is not typically suited for all I/O devices. For example, using a FIFO scheduler for scheduling both printer requests and disk requests may provide mixed results. That is, the FIFO scheduler may perform well for the printer requests, as printer requests are often expected to be scheduled on a first-come first-served basis. However, FIFO may not perform well vis-à-vis the disk requests, as disk requests can typically be scheduled with shorter turn-around times when the I/O scheduling algorithm considers the physical and logical properties of the disk. Thus, a single scheduler may not provide good performance for multiple I/O devices.
Another prior art technique calls for configuring multiple I/O schedulers when an operating system is compiled. Typically, before an operating system can be executed on a computer, the operating system source code must be compiled into executable machine code. During this compilation process, the operating system is configured to employ certain I/O schedulers for scheduling I/O on the target computer. For example, at compile time, an operating system is configured to use a FIFO scheduler for printer requests and a SCAN scheduler for disk requests. One disadvantage of this prior art technique is that every time the I/O scheduler is reconfigured, certain operating system components must be recompiled. Moreover, the I/O schedulers cannot be reconfigured to respond to changing I/O demands while the operating system is executing. For example, the operating system could not shift from a SCAN scheduler to an Earliest Deadline First scheduler in response to launching an application that requires real-time disk-scheduling.